package cn.cs.message.support;

/**<pre>
 * 命名服务：
 * 1)提供exchange, queue, routingKey的名称
 * 2)模块名称的验证
 * </pre>*/
public class MessageNameService 
{
	private static final String A_TO_B="AtoB";
	private static final String B_TO_A="BtoA";
	private static final String PREFIX="cs";
	
	/**消息的方向，：发送的消息来自A内部；false：发送的消息来自外部*/
	private boolean isAtoB=false;
	
	/**获取appCode对应的queue的名称*/
	public String getQueueName(String appCode)
	{
		return getFinalPrefix()+appCode;
	}
	
	/**获取消息的RoutingKey*/
	public String getRoutingKeyName(String moduleCode)
	{
		return PREFIX+"."+moduleCode;
	}
	
	/**获取模块对应的Exchange的名称*/
	public String getExchangeName(String moduleCode)
	{
		return getFinalPrefix()+moduleCode;
	}
	
	private String getFinalPrefix()
	{
		return PREFIX+"."+getInfix()+".";
	}
	
	private String getInfix()
	{
		return isAtoB?A_TO_B:B_TO_A;
	}

	public boolean isAtoB() {
		return isAtoB;
	}

	/**设置发送的消息的来源，
	 * @param isAtoB true:来自A内部，false:来自非A的外部应用，默认false*/
	public void setAtoB(boolean isAtoB) {
		this.isAtoB = isAtoB;
	}
}
